【PHP】配列(array)- 複数の値を記憶するデータ構造
PHPには配列と呼ぶデータ構造があります。
配列は複数の値を記憶でき、配列型の変数や値として扱うことができます。
ここでは、配列について解説します。
検証環境
配列
配列は複数の値を記憶するデータ構造です。
整数型や文字列型と同様に配列型(array
)が存在します。
データ構造
配列型の変数と記憶領域の関係をイメージで掴みましょう。
スカラー型(整数型や文字列型など)は1つの記憶領域と繋がりますが、配列型は複数の記憶領域と繋がることが可能です。
この1つ1つの繋がりには名前があり、その名前のことをキーと呼びます。
キー
キーは配列と記憶領域の繋がりに対する名前です。
キーには数値や文字列を使うことができ、数値の場合は『キー』ではなく『インデックス』や『添字』という名称で呼ばれることがあります。
配列の生成
配列を扱うには初めに配列を生成します。
基本構文
生成の構文は2通りあります。
変数 = array()
変数 = []
array()
または[]
を記述することで配列型の値を生成できます。
[]
はarray()
の短縮構文と呼ばれる省略した記法です。
サンプル
<?php
___ih_hl_start
$fruits = [];
___ih_hl_end
var_dump($fruits);
?>
$ php sample.php
array(0) {
}
var_dump
関数で$fruits
の情報を出力すると、array型(配列型)であることが分かります。
配列の初期化
配列は生成時に初期値を設定できます。
基本構文
初期化の構文は2通りあります。
キーと値
キーと値をセットで記述する初期化の構文です。
変数 = [
キー1 => 値1,
キー2 => 値2,
キー3 => 値3
...
]
※ ...
は任意の数の値を記述できるという意味です。
配列に記憶する複数の値を角括弧([]
)内に、キー
と値
を=>
で繋ぎ1つのセットとして記述します。
複数ある場合はカンマ(,
)区切りで記述することが可能です。
キーの省略
キーを省略した初期化の構文です。
変数 = [ 値1, 値2, 値3 ... ]
※ ...
は任意の数の値を記述できるという意味です。
配列に記憶する複数の値を角括弧([]
)内に、カンマ(,
)区切りで値を記述します。
キーを省略すると、各値のキーは先頭から0,1,2...整数値の連番を割り当てられます。
なお、連番は0から始まることに注意してください。
サンプル
<?php
___ih_hl_start
$fruits = [ 'Apple', 'Orange', 'Melon' ];
___ih_hl_end
var_dump($fruits);
?>
$ php sample.php
array(3) {
[0]=>
string(5) "Apple"
[1]=>
string(6) "Orange"
[2]=>
string(5) "Melon"
}
3行目で配列を'Apple'
、'Orange'
、'Melon'
の3つの値で初期化しています。
キーは省略したため、先頭から0
、1
、2
です。
実際に実行結果からキーと値の情報を確認できます。
例えば、次の部分からは“キーが0
の値はstring
型の'Apple'
”であることが分かります。
[0]=>
string(5) "Apple"
また、キーを省略しない場合は次のようになります。
<?php
___ih_diff_start
-$fruits = [ 'Apple', 'Orange', 'Melon' ];
+$fruits = [ 0 => 'Apple', 1 => 'Orange', 2 => 'Melon' ];
___ih_diff_end
var_dump($fruits);
?>
値の取得
配列の値を取得するにはキーを指定します。
基本構文
変数[キー]
キー
の部分は取得する値のキーです。
サンプル
<?php
$fruits = [ 'Apple', 'Orange', 'Melon' ];
___ih_hl_start
echo $fruits[0] . "\n";
echo $fruits[1] . "\n";
echo $fruits[2] . "\n";
___ih_hl_end
?>
$ php sample.php
Apple
Orange
Melon
5〜7行目で配列の各値を取得し、出力しています。
値の記憶
配列に値を記憶するにはキーを指定して、代入演算子で値を代入します。
基本構文
変数[キー] = 値
キー
の部分に指定した記憶領域に値を代入します。
既に同じキーが存在する場合は値を上書きし、存在しない場合は新しい記憶領域に指定したキーで繋がりを持ち値を記憶します。
サンプル
<?php
$fruits = [ 'Apple', 'Orange', 'Melon' ];
var_dump($fruits);
___ih_hl_start
$fruits[1] = 'Grape';
$fruits[3] = 'Pineapple';
___ih_hl_end
echo "-------------------------\n";
var_dump($fruits);
?>
$ php sample.php
array(3) {
[0]=>
string(5) "Apple"
[1]=>
string(6) "Orange"
[2]=>
string(5) "Melon"
}
-------------------------
array(4) {
[0]=>
string(5) "Apple"
[1]=>
string(5) "Grape"
[2]=>
string(5) "Melon"
[3]=>
string(9) "Pineapple"
}
7〜8行目が配列への値の代入です。
7行目は既存のキーに対して値を代入しているため、元の値'Orange'
が上書きされ、8行目では新しいキーで値を記憶しています。
1回目と2回目のvar_dump
関数の出力を比較すると、値の上書き、追加ができていることが分かります。
配列のサイズ
配列のサイズ(値の個数)はcount関数で取得できます。
関数が未学習の方は、ここでは記法と処理のみ覚えていただければ問題ありません。
基本構文
count(配列型の変数)
サンプル
<?php
$fruits = [ 'Apple', 'Orange', 'Melon' ];
___ih_hl_start
echo count($fruits) . "\n";
___ih_hl_end
$fruits[1] = 'Grape';
$fruits[3] = 'Pineapple';
___ih_hl_start
echo count($fruits) . "\n";
___ih_hl_end
?>
$ php sample.php
3
4
5行目と10行目でcount
関数を使用しています。
5行目時点では値は'Apple'
、'Orange'
、Melon'
のため、サイズは3
です。
10行目時点では'Pineapple'
を追加したため、サイズは4
になります。
7行目の$fruits[1] = 'Grape'
は既存キーの値を上書きしているだけなので、配列のサイズに影響しません。
注意点
値の取得時に存在しないキーを指定するとエラーが発生します。
<?php
$fruits = [ 'Apple', 'Orange', 'Melon' ];
echo $fruits[3] . "\n";
?>
$ php sample.php
PHP Warning: Undefined array key 3 in sample.php on line 5
Warning: Undefined array key 3 in sample.php on line 5
このエラーの原因は$fruits
に存在しないキーである3
にアクセスしたことです。
また、このようなエラーを避けるため、インデックス(キーが数値)は連番になっていることが望ましくあります。
新しく値を追加するときは、インデックスを指定せずに値を代入することで、インデックスの最大値+1で値を記憶できます。
変数[] = 値
+α($argv)
予備知識になりますが、コマンドライン引数の$argv
は配列型の変数です。
詳しくは次のドキュメントをご参照ください。